<?php
/*
 * PFramework 框架内核默认初始化文件
 *
 * 此文件内只定义, 包含一些基础类库, 同时对一些运行期间必要的设置进行检查
 * ============================================================================
 * @levsion 2010-10-01
 *
 */

ob_start();

/*
 * 定义一些常量, 部分常量可以或需要在此文件包含之前定义
 * ============================================================================
 *
 */

/* 核心框架的版本号, 包含最后修改时间等信息 */
define("APPLICATION_CORE_VERSION", 'levsion 2010-10-01');

/* 核心框架的位置, 默认为当前目录, 可以在外部先定义 */
defined('PF_DIR')	|| define('PF_DIR', realpath(dirname(__FILE__)));

/* 是否处于调试模式, 可在外部定义 */
defined('PF_DEBUG') || define('PF_DEBUG', false);

/* 是否处于后台脚本模式, 如果是后台脚本模式, 则不会自动包含 dispatcher */
defined('CORE_DAEMON')	|| define('CORE_DAEMON', false);

/* 当前 virtual host 的根目录, 可以在包含此文件前定义 */
defined('VHOST_DIR')	|| define('VHOST_DIR', $_SERVER["DOCUMENT_ROOT"]);

/* 当前应用的程序文件路径, 需要在包含此文件之前定义 */
defined('APP_DIR')	|| trigger_error('undefined APPLICATION_ROOT!', E_USER_ERROR);

/* 线上代码中如果没有设置这个hook会出现500错误, 估计是php bug, 待查出问题后去掉此调用 */
set_error_handler('__system_catch_exception');

/*
 * 主框架的一些基本函数
 * ============================================================================
 *
 */

/* 框架环境变量 */
global $__core_env;

function load_model ($modeldir, $type = 'require'){
	if(!file_exists(APP_DIR."/models/".$modeldir."Model.php")){
		trigger_error($modeldir.'文件不存在!', E_USER_ERROR);
		return false;
	}
	if($type == 'include'){
		include_once(APP_DIR."/models/".$modeldir."Model.php");
	}else{
		require_once(APP_DIR."/models/".$modeldir."Model.php");
	}
	
	return true;
}

function load_ctl ($ctldir){
	if(preg_match("/^admin_.+$/i",$ctldir)):
		$ctldir = str_replace("admin_","",$ctldir);
		if(!file_exists(APP_DIR."/modules/admin/controllers/".$ctldir."Controller.php")){
			trigger_error($ctldir.'文件不存在!', E_USER_ERROR);
			return false;
		}
		require_once(APP_DIR."/modules/admin/controllers/".$ctldir."Controller.php");
		return true;
	endif;
	if(!file_exists(APP_DIR."/modules/default/controllers/".$ctldir."Controller.php")){
		trigger_error($ctldir.'文件不存在!', E_USER_ERROR);
		return false;
	}
	require_once(APP_DIR."/modules/default/controllers/".$ctldir."Controller.php");
	return true;
}

function load_inc($inc){
	if(!file_exists(APP_DIR."/include/".$inc.".php")){
		php_alert($inc."文件不存在");
		return false;
	}
	require_once(APP_DIR."/include/".$inc.".php");
	return true;
}


function load_PFctl($filename){
	if (defined('PF_DIR')) {
		if(file_exists(PF_DIR.'/controller/'.$filename)){
			require_once(PF_DIR.'/controller/'.$filename);
		}
		return true;
	}
	return false;
}


function load_PFmodel($filename) {
	if (defined('PF_DIR')) {
		if(file_exists(PF_DIR.'/model/'.$filename)){
			require_once(PF_DIR.'/model/'.$filename);
		}
		return true;
	}
	return false;
}

/*
 * 捕捉错误
 *
 */
function __system_catch_exception($errno, $errstr, $errfile, $errline){
    if(!PF_DEBUG) return true; // 线上直接返回
	printf("[Error] error found: %s(No.%d) at file: %s(line %d)\n", $errstr, $errno, $errfile, $errline);
    return true;
    exit;
}
load_PFctl('BaseController.php');
load_PFctl('FrontController.php');
load_PFmodel('BaseModel.php');

?>
